#pragma once

#include <boostext/util/make_shared.hpp>
#include <engine.core/noncopyable.hpp>

#include "exports.hpp"




namespace Engine
{
	namespace Video
	{
		struct ENGINE_VIDEO_API Blend
		{
			enum Type
			{
				Zero,
				One,
				SrcColor,
				InvSrcColor,
				SrcAlpha,
				InvSrcAlpha,
				DestAlpha,
				InvDestAlpha,
				DestColor,
				InvDestColor,
				SrcAlphaSat,
				BlendFactor,
				InvBlendFactor,
				Src1Color,
				InvSrc1Color,
				Src1Alpha,
				InvSrc1Alpha,
			};
		};
		///////////////////////////////////////////////////////////////////////////////////////////////////

		struct ENGINE_VIDEO_API BlendOp
		{
			enum Type
			{
				Add,
				Subtract,
				RevSubtract,
				Min,
				Max,
			};
		};
		///////////////////////////////////////////////////////////////////////////////////////////////////




		class ENGINE_VIDEO_API BlendState : public noncopyable
		{
		public:

			SHARED(BlendState);



			/**
			 * Define the first RGB data source.
			 */
			virtual void setSrcBlend(Blend::Type blend) = 0;

			/**
			 * Defines the second RGB data source.
			 */
			virtual void setDestBlend(Blend::Type blend) = 0;

			/**
			 * Defines the blending operation that is given both data sources.
			 */
			virtual void setBlendOp(BlendOp::Type blendOp) = 0;
		};
		///////////////////////////////////////////////////////////////////////////////////////////
	}
	///////////////////////////////////////////////////////////////////////////////////////////////
}
///////////////////////////////////////////////////////////////////////////////////////////////////
